// router/enter.go
// =============================================================================
// | 包: router                                                               |
// | 模块: 路由管理                                                           |
// | 功能: 负责初始化HTTP路由器，注册所有API路由和中间件                      |
// =============================================================================
package router

import (
	"blog_server/global"     // 全局变量包 - 提供全局配置和数据库连接
	"blog_server/middleware" // 中间件包 - 提供HTTP请求处理的中间件

	"github.com/gin-gonic/gin" // Gin Web框架 - 提供HTTP路由和处理功能
)

// =============================================================================
// | 函数: Run                                                                |
// | 参数: 无                                                                  |
// | 返回: 无                                                                  |
// | 功能: 初始化Gin路由器，配置中间件，注册路由，并启动HTTP服务              |
// | 说明: 应用程序的HTTP服务入口函数，负责启动整个Web服务                    |
// |----------------------------------------------------------------------------|
// | 流程:                                                                     |
// | 1. 设置Gin运行模式                                                        |
// | 2. 创建Gin默认路由器                                                      |
// | 3. 配置静态文件服务                                                       |
// | 4. 创建API路由组并添加中间件                                              |
// | 5. 注册站点相关路由                                                       |
// | 6. 从全局配置获取监听地址                                                 |
// | 7. 启动HTTP服务，监听指定地址                                             |
// =============================================================================
func Run() {
	// -------------------------------------------------------------------------
	// | 步骤1: 设置Gin运行模式                                                  |
	// -------------------------------------------------------------------------
	// 从全局配置获取Gin运行模式并设置
	gin.SetMode(global.Config.System.GinMode) // 设置Gin框架运行模式

	// -------------------------------------------------------------------------
	// | 步骤2: 创建Gin默认路由器                                                |
	// -------------------------------------------------------------------------
	// 初始化Gin默认路由器，包含Logger和Recovery中间件
	r := gin.Default() // 创建Gin路由器实例

	// -------------------------------------------------------------------------
	// | 步骤3: 配置静态文件服务                                                 |
	// -------------------------------------------------------------------------
	// 设置/uploads路径指向本地uploads目录，提供静态文件服务
	r.Static("/uploads", "uploads") // 配置静态文件服务

	// -------------------------------------------------------------------------
	// | 步骤4: 创建API路由组并添加中间件                                        |
	// -------------------------------------------------------------------------
	// 创建以/api开头的路由组
	nr := r.Group("/api") // 创建API路由组
	// 为API路由组添加日志中间件
	nr.Use(middleware.LogMiddleware) // 添加日志中间件

	// -------------------------------------------------------------------------
	// | 步骤5: 注册站点相关路由                                                 |
	// -------------------------------------------------------------------------
	// 注册站点相关的路由处理器
	SiteRouter(nr) // 注册站点路由
	LogRouter(nr)

	// -------------------------------------------------------------------------
	// | 步骤6: 从全局配置获取监听地址                                           |
	// -------------------------------------------------------------------------
	// 从全局配置中获取系统监听地址
	addr := global.Config.System.Addr() // 获取服务器监听地址

	// -------------------------------------------------------------------------
	// | 步骤7: 启动HTTP服务                                                     |
	// -------------------------------------------------------------------------
	// 在指定地址上启动HTTP服务
	r.Run(addr) // 启动HTTP服务
}
